perm filename ALPHA.F4[P11,LCS]4 blob
sn#585808 filedate 1981-05-11 generic text, type T, neo UTF8
C**** ALPHA.F4, **********
C***** ALPHA, SPACER,JDRAW,EXTEN,RTLINE,THICK,RBJX,CENTX,CENTER,LINX
C***** UNPACK,ROFF,NOZERO,RHORZ
C****** FOR LISTS OF LETTERS, ETC. AND TRILL *******
SUBROUTINE ALPHA
INTEGER FNAME
DIMENSION FNAME(4)
COMMON /PLTR/IPLT,RHT,DIS /FONT/JFONT /NFONT/NFONT
COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20) /INTGRS/JACC
COMMON/ALF/INP(10),OLDX,INN(38),RMINI /OLDTOP/OLDY
EQUIVALENCE(J3,JQ(1)),(J4,JQ(2)),(J5,JQ(3)),(R5,RJQ(3)),
1(R8,RJQ(6)),(NRJ,RJQ(8)),(JX,JQ(11)),
1(R6,RJQ(4)),(J7,JQ(5)),(J8,JQ(6)),(J9,JQ(7)),(J10,JQ(8))
1,(J6,JQ(4)),(R7,RJQ(5)),(R4,RJQ(2)),(IFNT,JQ(13)),(J11,JQ(9)),
1(RY,JQ(16)),(RX,JQ(17)),(RZ,JQ(18)),(RW
1,JQ(19)),(RB,JQ(20)),(R,RJQ(20)),(FILL,RJQ(19)),(R9,RJQ(7))
1,(JTR,RJQ(17)),(RF,RJQ(15)),(JR3,RJQ(14)),(R3,RJQ(1))
1,(R10,RJQ(8)),(R11,RJQ(9)),(R12,RJQ(10))
COMMON/STF/RSTFAC(8),RSTJ2 /POSI/STFF(8),JJ2,POS
DATA R4X/-2.1/,IFNT/1/,BLANK/0.7/,NFONT/'BDR40'/
1,FNAME/'PRIM0','BDR40','BDI40','BDL40'/
C SEE NEW SIZE FOR 'BLANK'=.7 (OLD SIZE=1.0, CHANGE IN DDT IF NECESSARY)
IF(JA.EQ.7)GO TO 20
JTR=99
IF(R5.GE.100)R5=R5-100
C >100 FOR TEXT IN ORCH SCORES FOR ALL SEP. PARTS.
C PRIMITIVE IS DEFAULT FONT. #=SET BACK TO PRIM.
C ONLY 11 LETTERS WITHOUT FONT RESET.
JF=-JFONT
IF(JFONT.GE.0)GO TO 540
JFONT=1
NFONT=FNAME(JF)
GO TO 54
540 IF(NFONT.EQ.'PRIM0')GO TO 54
IF(NFONT.EQ.'BDI40')GO TO 54
NFONT='BDR40'
C THE ABOVE IN CASE FONT IS NOT ESTABLISHED.
54 R=19.7*R5*RSTJ2
RB=J3
RW=R4
J9=0
C J9=0 AVOIDS ROTATION IN 'CLEFS'
DO 50 KA=4,6
NXZ=-1
RZ=RJQ(KA)
CC JY=RZ
CC IF(JY.NE.RZ)GO TO 130
CC IF(JY.EQ.RZ)GO TO 13
C WILL LOSE ON "0AB0" IN OLD FILES**************
CC IF(JY.GT.999999)GO TO 13
CC130 RZ=100.*RZ
C FOR OLD FORMAT OF CODE 16
13 JY=RZ+.2
JX=1000000
DO 53 LA=1,4
J5=JY/JX
JY=JY-J5*JX
C GET NEXT NUM OUT OF JY FOR NEXT TIME AROUND
JX=JX/100
CC J5X=J5
R3=J3
IF(J5.EQ.99)GO TO 55
73 IF(KFNT)IFNT=1
C READS OLD SYS. AND NEW AUTOMATIC LWR CASE.
IF(J5.LT.70)GO TO 72
KFNT=-1
C SETS AUTOMATIC LOWER CASE FLAG.
IFNT=-1
C 60 ADDED FOR LOWER CASE LETTERS.
J5=J5-60
C NO MORE IN THIS WD.
72 IF(J5.LT.48)GO TO 1
IF(J5.NE.48)GO TO 172
NFONT='BDL40'
IF(JFONT.LT.0)GO TO 9
GO TO 53
172 GO TO(2,3,9,4,5),J5-49
C SWITCHES FOR DIFF. FONTS.(55 MAKES ')48=UPR,49=LWR,50=BDR,51=BDI,52=PRM
C ********* UPPER AND LOWER NUMBERS(48,49) NO LONGER NEEDED.(SEE 73 ↑)
IF(J5.GT.55)GO TO 10
J5=36
R4=R4+2.9*R5
C 55 WILL MAKE ' --- 56=? 57=! (THEY COME AFTER y z IN BDR46)
GO TO 1
10 J5=J5+6
NRX=NFONT
NXZ=0
NFONT='BDR40'
NJF=JFONT
JFONT=-1
GO TO 1
2 NFONT='BDR40'
C &=NON-ITALICS -- JFONT IS TEMPORARY SWITCH 5/74
IF(JFONT.LT.0)GO TO 9
GO TO 53
CC GO TO 8
3 NFONT='BDI40'
C @=51=ITALICS
IF(JFONT.LT.0)GO TO 9
C TYPE '44 -1' TO MAKE ALL FONTS INTO 'PRIM'
CC8 IF(IFNT.EQ.0)IFNT=-1
GO TO 53
4 FILL=-2
GO TO 53
5 FILL=0
GO TO 53
9 NFONT='PRIM0'
GO TO 53
1 IF(J5.LT.70)GO TO 12
IF(J5.GE.76)GO TO 12
IF(J5.NE.75)GO TO 112
J5=70
GO TO 12
112 NFONT='BDI40'
J5=J5-6
GO TO 71
12 J5X=J5
CC12 J5OLD=J5
IF(J5.LT.64)GO TO 212
CC J5X=J5
IF(J5.LE.65)J5X=J5X-6
IF(J5.EQ.70)J5X=J5X-1
CC J5=J5X
212 CALL SPACER(J5X,IFNT,RB,R)
CC J5=J5OLD
IF(J5.GT.60)GO TO 71
C NOW 62=? 63=! IN BDR46
IF(J5-47)7,6,53
7 IF(R11.NE.0.AND.R12.EQ.0)GO TO 79
IF(JFONT)78,78,77
79 R9=R11
J9=-1
C FOR ROTATION, IF ANY. R11=ROTATION(CLOCKWISE) IN DEGREES.
GO TO 77
277 IF(NFONT.NE.'PRIM0')GO TO 70
IF(IFNT.GE.0)GO TO 30
IF(J5.GE.10)GO TO 71
GO TO 30
177 J5=J5+22
C (=62 )=63 IN BDI (BDI46)
NRX=NFONT
C SAVE OLD FILE NAME
NFONT='BDI40'
NJF=JFONT
C SAVE FONT FLAG
NXZ=0
C FLAG TO GET BACK RIGHT FLAGS BEFORE 30
GO TO 71
78 IF(IPLT.GE.0)GO TO 30
C JFONT=0 FOR FIXED WIDTH OF FONTS. = AND ONLY DPYS PRIMITIVE.
CC J5=J6
CC IF(IFNT.EQ.0)GO TO 30
CC77 IF(J5.GE.36)GO TO 30
77 IF(J5.LT.36)GO TO 277
IF(J5.EQ.40.OR.J5.EQ.41)GO TO 177
C FOR LEFT AND RIGHT PARENTH.
IF(J5.NE.43)GO TO 30
C ASTERISK
C PUNCTUATION AND SPACE.
IF(NFONT.EQ.'PRIM0')GO TO 30
IF(NFONT.EQ.'BDI40')GO TO 77
NRX=NFONT
NXZ=0
NJF=J5
NFONT='BDI40'
777 J5=69
GO TO 71
CZ IF(IFNT.GE.0)GO TO 30
CC*** WAS (IFNT.EQ.1) ???? 1/76
CZ IF(J5.LT.10)GO TO 30
C JUMP TO USE UPPER CASE PRIM. LOWER CASE STARTS IN PRIM1.
CZ GO TO 71
70 IF(J5.LE.9)GO TO 71
IF(IFNT.LT.0)J5=J5+26
71 RX=R6
R6=R5*.28
C .29 IS SIZE FACTOR -- PERHAPS CHANGE SIZE IN FONT TO =1.
RY=R7
R7=R6
RZ=R8
R4=R4+R4X
C SHIFTS DOWN ??? WHY NOT GET RID OF THIS.??
J8=FILL
NRJ=NFONT
C GETS RIGHT FILE
R8=0
C TO AVOID THICKENER IN 'CLEFS'
JA=12
C ANY NON-11 NUMBER .GT.10 WILL DO.
CALL CLEFS
R6=RX
R7=RY
R8=RZ
C PUTS BACK RIGHT STUFF
IF(NXZ.LT.0)GO TO 6
NFONT=NRX
JFONT=NJF
GO TO 6
30 J7=0
R6=R5
CALL PNUM
C 47=BLANK (WAS 99)
6 J3=ROFF(RB)
R4=RW
53 CONTINUE
50 CONTINUE
55 IF(JTR.NE.99)GO TO 52
C*** WHEN ISN'T JTR=99????
NSAV=NFONT
GO TO 100
C FOR TRILLS
C 7, POS1, STF, NT#, SIZE, POS2, X IF X=1 THEN NO WAVEY LINE
20 RF=R6
NSAV=NFONT
C SAVE THE FONT NAME. GET IT BACK AT END.
JTRILL=J7
IF(J7.LE.1)GO TO 200
IF(J7.GE.8)GO TO 201
C JUMP FOR OTTAVA
C NEXT FOR SPECIAL PEDAL MARKS.
C PEDAL: 7,STF,POS,0=STND POS,NNN=PEDS,POS2,BRACK #S,LFT POS BRK.
C P5=101 MEANS LFT & RT PEDS., P7=2 NO BRK, =3 --!, =4 ----
RW=R8
RB=R3
NFONT=J7
JY=J5
CALL NOZERO(R9)
RY=R9
RX=23.84*R9*RSTJ2
R6=.45*RY
J9=0
J5=18
C IN FILE CLEF1.DMD
JA=3
R5=0
R7=0
R4=R4-6
C STANDARD POS IS AT -6 ****** (I.E. P4=0 PUTS TOP OF IT AT -6)
CALL CLEFS
R8=0
IF(JY.EQ.0)GO TO 222
R8=-1
J5=19
IF(JY.LT.100)GO TO 203
JY=JY-100
CALL CLEFS
203 R3=RB+RX
IF(JY.LT.10)GO TO 204
JY=JY-10
CALL CLEFS
204 R3=RB+RX+RX
IF(JY.NE.0)CALL CLEFS
C PRINTS THE 3 BOTTOM ITEMS
222 IF(NFONT.EQ.2)GO TO 2222
IF(RW.NE.0)R3=RB-5.96*RW
C FOR BRACKET
RX=POS
R6=RF
R4=R4+3.
R5=R4
J7=0
R7=0
R8=0
R10=0
206 CALL ITMSUB
IF(NFONT.EQ.4)GO TO 2222
C R7=4= NO END ON BRKT.
IF(NFONT.EQ.5)GO TO 2206
OLDY=10.*RY*RSTJ2
C THIS WILL BE VERTICAL PART OF BRACK. END.
C THE COORD. FROM LAST LINES CALL
CALL LINES(OLDX,OLDY,2)
C OLDX WAS LAST X COORD. IN ITMSUB **************
GO TO 2222
CZ POS=RX
C POS GOT RUINED IN ITMSUB.
CZ R3=ROFF(RHORZ(RF))
CZ R5=R5+1.4*RY
CZ CALL ITMSUB
CZ RETURN
2206 RARR=2.25*RY*RSTJ2
R4=R4+2.12
JA=4
J5=50
C FOR CRESC.
RYY=1.29*RY
R6=RF
R3=(R6-RARR)*5.96-596.
R7=-RYY
CALL ITMSUB
C GO DRAW CRESC.
GO TO 2222
C NEXT FOR 8VA BASSA
202 R7=47717088.
R8=88709999.
RR10=138.
R6=51089170.
GO TO 214
201 CALL NOZERO(R5)
IF(J7.EQ.15)GO TO 205
R6=51089170.
C NEXT = 8VA
RR10=47.
R7=99999999.0
214 RR5=R5*RSTJ2
RR3=R3+RR10*RR5
C SAVE FOR POS. OF DASHES
JTR=-1
J4=J7
J10=J8
C SAVE THESE IN PARAMS NOT USED IN ALPHA
GO TO 2212
C 15MA - - - - -
205 R6=51010582.
R7=70999999.
RR10=56.
GO TO 214
C NEXT FOR THE DASHES. J8=1 =NO END BRACK.
213 R8=1.8*RR5
R9=0
R3=RR3
R6=RF
R4=R4+.7*RSTJ2
R5=R4
J5=J4
J11=-1
IF(J4)J11=-J11
IF(J10.NE.0)J11=0
J7=1
J10=0
C GO DRAW THE DASHES
CALL ITMSUB
GO TO 2222
200 CALL NOZERO(R5)
IF(J7.EQ.-8)GO TO 202
RR10=R5
C ↑↑↑↑↑ R10 GETS WIPED OUT IN ALPHA OR CLEFS.
RR3=R3
C SAVE FOR ACCI OVER TRILL
J3=J3+6.*RSTJ2
JR3=J3
R6=51898799.0
C @tr LWR CASE, ITAL. TR
JACC=R8
C FOR ACCI OVER TR
R7=0
R8=R7
JTR=J7
2212 R5=.8*R5
GO TO 54
CC52 J5=R8
C FOR ACCI OVER TR (RW WAS ORIGINALLY R8)
CC RK=POS
C SAVE POS IN K FOR ACCI ROUTINE
52 IF(JTR.NE.0)GO TO 1000
C GO TO 100 IF NO WAVY LINE IS NEEDED. J7=1=NO, 0=YES
R3=JR3+20.*RSTJ2*RR10
JA=4
J7=-2
C J7 IS SWITCH TO DRAW WIGGLE
R6=RF
R9=.7*RR10
C SETS WIGGLE HEIGHT
R8=.9*RR10
C RR10 IS SIZE (P5)
J10=0
IF(IPLT.LT.0)J10=1
CALL ITMSUB
C SINGLE WIGGLE ON DPY, DOUBLE ON PLOTTER.
1000 IF(JTRILL.LT.0.OR.JTRILL.GT.1)GO TO 100
C NEXT PUTS ACCI OVER TR IF 1, 2 OR 3 IN P8
C IF JTRILL(J7)=0 OF 1 IT'S A TRILL, ELSE GO TO 2222
C IF R8=0 GOTO 2222 (R8 HAS ACCI NUM)
IF(JACC.EQ.0)GO TO 100
C SKIP NEXT IF NO ACCI OVER TRILL
CC POS=RK
C GET BACK POS. (IT GOT CHANGED IN "WIGGLE")
CENTR=CENTR+26.*RSTJ2
CC R6=R5*.9
RMINI=R5*.9*RSTJ2
CC R3=J3-14.*RSTJ2
R3=R3+29.*RMINI
R=R4+3.75
C R IS USED IN DRWNT. R4 MUST BE FIXED FOR DIF. SIZES (4.15*RMINI??)
JA=0
CALL ACCI
100 IF(JTR.LT.0)GO TO 213
IF(KFNT.LT.0)IFNT=1
KFNT=0
2222 NFONT=NSAV
C GET BACK ORIGINAL FONT NAME
END
C***** SPACER,JDRAW,EXTEN,RTLINE,THICK,RBJX,CENTX,CENTER,LINX
C***** UNPACK,ROFF,NOZERO,RHORZ
SUBROUTINE SPACER(J5,IFNT,RB,R)
C **** THIS IS FROM ALPHA.FAI
C SPACES ALPHABET ITEMS.
DATA RS/1.08/,RSPC/1./,RLWR/.96/,BLANK/0.7/
C JUMP TO USE PRIMITIVE ALPHABET.
IF(J5.GT.47)GO TO 10
IF(J5.LE.9)GO TO 177
IF(J5.LT.36)GO TO 10
C NEXT FOR NUMBERS, SPACE AND PUNCTUATION.
CZ177 RSX=BLANK
CZ IF(IFNT)RSX=.9
177 RSX=1.0
IF(J5.EQ.47)RSX=BLANK
IF(IFNT.LT.0)RSX=.9
IF(J5.NE.39)GO TO 3
C IF IT IS '=' THEN USE 1.2096
RSX=1.2096
GO TO 21
10 IF(J5.LT.47)GO TO 5
IF(J5.EQ.52)GO TO 14
IF(J5.GE.55)GO TO 5
C PUNCT. WILL EXPAND ABOVE 54.
RETURN
14 IFNT=0
C #=52=PRIMITIVE
JA=10
RETURN
5 RSX=RS
IF(IFNT.LT.0)RSX=RLWR
C FOR LOWER CASE SPACING. (96%)
IF(J5.EQ.22.OR.J5.EQ.69.OR.J5.EQ.59.OR.J5.EQ.59)GO TO 277
C JUMP IF 1/8 NOTE OR 'M' OR 1/4 OR 1/2
IF(J5.NE.32)GO TO 3
277 RSX=RSX*1.12
C FOR M AND W
3 IF(J5.GE.36)GO TO 21
IF(J5.EQ.1)GO TO 21
IF(J5.EQ.18)GO TO 21
IF(J5.EQ.19)GO TO 21
C FOR 1,I AND J
IF(IFNT.GE.0)GO TO 4
C NEXT FOR LOWER CASE ONLY.
IF(J5.EQ.15)GO TO 21
IF(J5.EQ.19)GO TO 21
IF(J5.EQ.21)GO TO 21
IF(J5.NE.29)GO TO 4
21 IF(J5.NE.47)RSX=RSX*.68
C FOR F,I,J,L,T
4 RB=RB+R*RSX
END
C**** ALL FOLLOWING ARE FROM MFAIL.FAI
SUBROUTINE JDRAW(M,R3,CENTR,RSTJ2,RX,RY)
C USES DATA FROM DRW PROGRAM.
COMMON/LL/L
DIMENSION M(1)
RC=RX*RSTJ2
RD=RY*RSTJ2
DO 2 K=2,M(1)
CALL UNPACK(IA,IB,M(K))
2 CALL LINES(FLOAT(IA)*RC+R3,FLOAT(IB)*RD+CENTR,L)
END
SUBROUTINE CENTER(CNTR)
C TO CENTER ITEMS CREATED WITH DRAWING PROG.
COMMON /STF/RSTFAC(8),RSTJ2 /POSI/STFF(8),JJ2,POS
COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
EQUIVALENCE (R4,RJQ(2))
CNTR=POS+(2+AMOD(R4,100.)*7)*RSTJ2
END
SUBROUTINE LINX(A,B,C,D)
C SAVES SPACE FOR SINGLE LINES.
CALL LINES(A,B,3)
CALL LINES(C,D,2)
END
SUBROUTINE UNPACK(M,N,I)
C UNPACKS VECTORS FROM DRW PROGRAM.
C EACH WD = N/AXXX/BYYY IF N.NE.0 =INVIS. LINE.
C IF A=1 THEN X IS NEG. IF B=1, Y IS NEG.
COMMON/LL/L
C L IS FOR VIS. OR INVIS. LINES.
N=I
L=2
M=N/100000000
IF(M.EQ.0)GO TO 2
L=3
N=N-100000000*M
2 M=N/10000
IF(M.GT.1000)M=1000-M
N=MOD(N,10000)
IF(N.GT.1000)N=1000-N
END
FUNCTION EXTEN(X)
EXTEN=AMOD(X,1.0)*10.
END
FUNCTION ROFF(R)
C FOR ROUND OFF
S=.5
IF(R.LT.0)S=-S
ROFF=R+S
END
SUBROUTINE NOZERO(X)
IF(X.EQ.0)X=1.
END
SUBROUTINE EXCH(X,Y)
Z=X
X=Y
Y=Z
END
FUNCTION RHORZ(R)
RHORZ=R*5.96-596.
END
C ADJUST BH AND FL FOR HEIGHT OF NOTE AND 'WIDTH'
CF IPOS=ROFF(RJQ(1)*DIS)
CCCF IF(RMINI.LT..9)IPOS=IPOS+1
CF JPOS=ROFF(CENTR*RHT)
CF IF(-RMINI.EQ.PRE)GO TO 10
CF PRE=-RMINI
CCCF D=.25*RMINI
CF D=.25
CF B=BH*RMINI*RHT
CF E=RMINI*DIS
CF A=BL*E
CF IC=A
CF A=A*A
CF E=-B/4.
CF K=B
CF B=B*B
C USES EQUATION FOR ELLIPSE
CF N=1
CF NX=2
CF6 DO 1 J=-K,K
CF Y=J*J
CF X=SQRT(A-(A*Y)/B)
CF L=E-X
CF M=X+E
C THE TWO SIDES OF THE LINE
CF IF(N)CALL EXCH(L,M)
CF IRN(NX)=L
CF IRN(NX+1)=M
C C IS VERTICAL POS.
CF NX=NX+2
CF E=E+D
C E IS TO TILT IT.
CF1 N=-N
CF10 CALL PLOT(IPOS+3,JPOS,3)
CF N=2
C 1ST LOC. OF ARRAY HAS "PRE"
CF L=IPOS+IC
CF DO 11 M=-K,K
CF J=M+JPOS
CF CALL PLOT(L+IRN(N),J,2)
CF CALL PLOT(L+IRN(N+1),J,2)
CF11 N=N+2
CF END
SUBROUTINE RJBX(R)
COMMON R2,JA,CN,J2,R3/STF/RSTFAC(8),RSTJ2
R3=R3+R*RSTJ2
END
SUBROUTINE CENTX
COMMON R2,JA,CENTR,D,E,R4,R(38) /STF/RSTFAC(8),RSTJ2
1 /POSI/STFF(8),JJ2,POS
CENTR=AMOD(R4,100.0)
IF(JA.EQ.8)GO TO 1
C STAFF CAN BE AT ANY LEVEL UP TO 99.9 + OR -
CR=0
IF(CENTR.LT.-80.)CR=100.
IF(CENTR.GE.80.)CR=-100.
R4=CENTR+CR
1 CENTR=POS+RSTJ2*((R4*7.)-18.)
END
CC CENTR=POS-18.*RSTJ2+AMOD(R4,100.0)*RSTJ2*7.
C******** THE ABOVE ARE NOW IN SMALL.FAI (3/75)
C****** 7, STF, POS, HGT, NUM OF SHARPS OR FLATS(+ OR -), CLEF
C ( CLEF = TREB,0 BASS,1 ALT,2 TEN,3 )
FUNCTION RTLINE(L)
COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)/XRN/RN(1)
C CHECKS TO SEEIF R2 HAS STAFF NUM DESIRED. (IF >7, ALL STAVES OK)
IF(R2.GT.7)GO TO 1
IF(RN(L+2).NE.R2)GO TO 2
1 RTLINE=0
C RIGHT STAFF
RETURN
2 RTLINE=-1
C WRONG STAFF
END
SUBROUTINE THICK
COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
1 /STF/RS(8),RSTJ2 /PLTR/PLT,RHT,DIS,XDIS
EQUIVALENCE (R8,RJQ(6)),(J8,JQ(6)),(J9,JQ(7)),(J4,JQ(2))
C RETURNS NUMBER OF THICKNESSES IN J8 AND "SCALED" STEP IN R8
C NEXT J8 = 1→99 =X THICKNESS, =100→ = Y THICKNESS
R8=AMOD(R8,100.0)
J9=J8/100
J8=R8
J4=-1
C FLAG FOR SINGLE ADDED VERTICAL THICKNESS, NO MATTER WHAT SIZE. R8=.5
IF(R8.NE.J8)J4=0
R9=RSTJ2*DIS
C R8 AND R9 ARE FACTORS TO CAUSE RIGHT NUM OF LINES FOR THICKNESS.
J8=J8*R9
J9=J9*R9
IF(J9.NE.0.AND.J8.NE.0)J9=J8
C IF BOTH X AND Y THICKNESS ARE USED THEY WILL BECOME EQUAL!
CC IF(J4)GO TO 1
IF(J4.GE.0)J9=1
C SINGLE ADDED THICKNESS, NO MATTER WHAT SIZE.; R8=1
END